package vista.objetos;

import java.awt.event.MouseAdapter;
import java.util.Iterator;
import java.util.List;

import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.swing.JFrame;

import controlador.ContenedorDeErrores;

import logica.ObjetoDiagrama;
import vista.Tema;
import vista.geometria.Circulo;
import vista.paneles.hojaDibujo.UtilHojaDeDibujo;
import vista.treeDiagrama.NodoTreeDiagrama;

public class IdentificadorGraficable implements Graficable {

	private List<Identificable> identificadores;
	
	public IdentificadorGraficable(List<Identificable> identificadores) {
		this.identificadores = identificadores;
	}
	
	@Override
	public void dibujarse(Object areaDeDibujo) 
	{
		GLAutoDrawable gLDrawable = (GLAutoDrawable) areaDeDibujo; 
		GL2 gl = gLDrawable.getGL().getGL2();
		
		float []coordM;
		
		for (Identificable identificador: this.identificadores)
		{
			gl.glPushMatrix();
				coordM = UtilHojaDeDibujo.getCoordMundo(gl, identificador.getPuntoInterseccion());
				gl.glTranslatef(coordM[0], coordM[1], 0.0f);
				Circulo.dibujarCirculoRelleno(gl, 1.2f, 10f, Tema.getInstancia().getLineaColor());
			gl.glPopMatrix();
		}
		
		Iterator<Identificable> itId = this.identificadores.iterator();

		
		if (itId.hasNext())
		{
			float [] inicio, fin;
			
			gl.glBegin(GL2.GL_LINE_STRIP);
			
			inicio = UtilHojaDeDibujo.getCoordMundo(gl, itId.next().getPuntoInterseccion());
		
			while (itId.hasNext())
			{
				fin = UtilHojaDeDibujo.getCoordMundo(gl, itId.next().getPuntoInterseccion());
				
				gl.glVertex2f(inicio[0], inicio[1]);
				gl.glVertex2f(fin[0], fin[1]);
				
				inicio = fin;
			}
			
			gl.glEnd();
		}
		
	}
	
	@Override
	public ObjetoDiagrama getObjetoDiagramaDecorado() throws NoEsObjetoDiagramableException {
		throw new NoEsObjetoDiagramableException("Un identificador graficable no tiene ningún objeto que decore.");
	}

	@Override
	public NodoTreeDiagrama getNodoTreeDiagrama() throws NoEsObjetoNodoException {
		throw new NoEsObjetoNodoException("Un identificador no aparece en el JTree");
	}

	@Override
	public void eliminarNodo() {
	}

	@Override
	public MouseAdapter getEventoEditarGraficable(JFrame ventanaPadre) {
		return null;
	}

	@Override
	public void borrarseDeLaHoja() {
	}

	@Override
	public boolean esElGraficableDe(ObjetoDiagrama objeto) {
		return false;
	}

	@Override
	public void validar(ContenedorDeErrores errores) { }

}
